package com.he.strategy.context;

import com.he.strategy.UploadStrategy;
import com.he.utils.MinioUtils;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

import static com.he.enums.UploadModeEnum.getStrategy;

/**
 * @author He
 * @version 1.0
 * @Date 2023/9/14 0:07
 * @Desc 上传策略上下文,设置上传模式
 */
@Service
public class UploadStrategyContext {
    /**
     * 上传模式，从配置文件中读取
     */
    @Value("${upload.strategy}")
    private String uploadStrategy;

    @Resource
    private MinioUtils minioUtils;

    //这个Map是在Spring容器中进行自动注入的，其中键是从配置文件中读取的上传策略名称，值是上传策略的具体实现。
    @Resource
    private Map<String, UploadStrategy> uploadStrategyMap;

    /**
     * 上传文件从配置文件中读取的上传策略名称，值是上传策略的具体实现。
     *
     * @param file 文件
     * @param path 路径
     * @return {@link String} 文件地址
     */
    public String executeUploadStrategy(MultipartFile file, String path) {
        return minioUtils.upload(file);
//        return uploadStrategyMap.get(getStrategy(uploadStrategy)).uploadFile(file, path);
    }
}
